package cn.hss.object.stat;

/**有继承关系的类的加载顺序
 * @author 作者：HeShaoShuai
 * @Email 邮箱：2569819541@qq.com
 * @Date 日期：2023/4/25 20:04
 * @Package 包名：cn.hss.object.stat
 * @Project 项目名：JavaSE
 * @Version 1.0
 */
public class A {
	int v1=1;
	static int v2=2;
	static {
		v2 +=2;
		System.out.println("A类静态代码块");
		System.out.println("静态变量v2="+v2);
	}
	{
		System.out.println("A类构造代码块");
	}
	public A(){
		v1 += 10;
		System.out.println("成员变量v1="+v1);
		System.out.println("A类构造的构造方法");
	}

	public static void main(String[] args) {
		//第一次创建对象
		new B();
        /*第一次创建对象
        1)加载父类，为父类的静态资源分配内存
        2)执行父类静态代码块和静态变量的赋值运算
        3)加载子类，为子类的静态资源分配内存
        4)执行子类静态代码块和静态变量的赋值运算
        5)创建父类对象，为父类非静态资源分配内存
        6)执行父类构造代码块和成员变量的赋值运算
        7)执行父类构造方法
        8)创建子类对象，为子类非静态资源分配内存
        9)执行子类构造代码块和成员变量的赋值运算
        10)执行子类构造方法
        * */
		System.out.println("------------");
		//第二次创建对象
		new B();
        /*第二次创建对象
        5)创建父类对象，为父类非静态资源分配内存
        6)执行父类构造代码块和成员变量的赋值运算
        7)执行父类构造方法
        8)创建子类对象，为子类非静态资源分配内存
        9)执行子类构造代码块和成员变量的赋值运算
        10)执行子类构造方法
        */
	}
}
class B extends A{
	int v3=3;
	static int v4=4;
	static {
		System.out.println("B类静态代码块");
		System.out.println("静态变量v4="+v4);
	}
	{
		v3 += 3;
		System.out.println("B类构造代码块");
		System.out.println("成员变量v3="+v3);
	}
	public B(){
		System.out.println("B类构造方法");
	}
}